package base.utils;

import android.text.TextUtils;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public final class EmojiMapUtil {

    public static String replaceCheatSheetEmojis(String s) {
        if (TextUtils.isEmpty(s)) {
            return "";
        }

        Matcher matcher = COLON_REGEX.matcher(s);

        while (matcher.find()) {
            String potentialEmoji = matcher.group();
            String replacement = CHEAT_SHEET_TO_UNICODE.get(potentialEmoji);

            if (!TextUtils.isEmpty(replacement)) {
                s = s.replace(potentialEmoji, replacement);
            }
        }

        return s;
    }

    /**
     * Replaces instances of Emoji unicode characters with their Emoji-Cheat sheet key
     *
     * @param s
     * @return
     */
    public static String replaceUnicodeEmojis(String s) {
        if (TextUtils.isEmpty(s)) {
            return "";
        }
        for (int i = 0; i < s.length(); i++) {
            String key = s.substring(i, i + 1);
            if ((Character.isLowSurrogate(key.charAt(0)) || Character.isHighSurrogate(key.charAt(0))) && s.length() > i + 1) {
                key = s.substring(i, i + 2);
            }
            String emoji = UNICODE_TO_CHEAT_SHEET.get(key);
            if (null != emoji) {
                s = s.replace(key, emoji);
            }
        }
        return s;
    }

    private static final Pattern COLON_REGEX = Pattern.compile(":[a-z0-9+_-]{1,31}:");

    private static final Map<String, String> UNICODE_TO_CHEAT_SHEET = new HashMap<String, String>();
    private static final Map<String, String> CHEAT_SHEET_TO_UNICODE = new HashMap<String, String>();

    private final static String[][] UNICODE_MAPPING = new String[][]{
            {":airplane:", "\u2708"},
            {":alarm_clock:", "\u23F0"},
            {":anchor:", "\u2693"},
            {":aquarius:", "\u2652"},
            {":aries:", "\u2648"},
            {":arrow_backward:", "\u25C0"},
            {":arrow_double_down:", "\u23EC"},
            {":arrow_double_up:", "\u23EB"},
            {":arrow_down:", "\u2B07"},
            {":arrow_forward:", "\u25B6"},
            {":arrow_heading_down:", "\u2935"},
            {":arrow_heading_up:", "\u2934"},
            {":arrow_left:", "\u2B05"},
            {":arrow_lower_left:", "\u2199"},
            {":arrow_lower_right:", "\u2198"},
            {":arrow_right:", "\u27A1"},
            {":arrow_right_hook:", "\u21AA"},
            {":arrow_up:", "\u2B06"},
            {":arrow_up_down:", "\u2195"},
            {":arrow_upper_left:", "\u2196"},
            {":arrow_upper_right:", "\u2197"},
            {":ballot_box_with_check:", "\u2611"},
            {":bangbang:", "\u203C"},
            {":cancer:", "\u264B"},
            {":baseball:", "\u26BE"},
            {":black_large_square:", "\u2B1B"},
            {":black_medium_small_square:", "\u25FE"},
            {":black_medium_square:", "\u25FC"},
            {":black_nib:", "\u2712"},
            {":black_small_square:", "\u25AA"},
            {":black_circle:", "\u26AB"},
            {":boat:", "\u26F5"},
            {":capricorn:", "\u2651"},
            {":church:", "\u26EA"},
            {":cloud:", "\u2601"},
            {":clubs:", "\u2663"},
            {":coffee:", "\u2615"},
            {":congratulations:", "\u3297"},
            {":copyright:", "\u00A9"},
            {":curly_loop:", "\u27B0"},
            {":eight_pointed_black_star:", "\u2734"},
            {":eight_spoked_asterisk:", "\u2733"},
            {":diamonds:", "\u2666"},
            {":email:", "\u2709"},
            {":envelope:", "\u2709"},
            {":exclamation:", "\u2757"},
            {":fast_forward:", "\u23E9"},
            {":fist:", "\u270A"},
            {":fountain:", "\u26F2"},
            {":fuelpump:", "\u26FD"},
            {":gemini:", "\u264A"},
            {":golf:", "\u26F3"},
            {":grey_exclamation:", "\u2755"},
            {":grey_question:", "\u2754"},
            {":hand:", "\u270B"},
            {":heart:", "\u2764"},
            {":hearts:", "\u2665"},
            {":heavy_check_mark:", "\u2714"},
            {":heavy_division_sign:", "\u2797"},
            {":heavy_exclamation_mark:", "\u2757"},
            {":heavy_minus_sign:", "\u2796"},
            {":heavy_multiplication_x:", "\u2716"},
            {":heavy_plus_sign:", "\u2795"},
            {":hotsprings:", "\u2668"},
            {":hourglass:", "\u231B"},
            {":hourglass_flowing_sand:", "\u23F3"},
            {":information_source:", "\u2139"},
            {":interrobang:", "\u2049"},
            {":left_right_arrow:", "\u2194"},
            {":leftwards_arrow_with_hook:", "\u21A9"},
            {":leo:", "\u264C"},
            {":libra:", "\u264E"},
            {":loop:", "\u27BF"},
            {":m:", "\u24C2"},
            {":negative_squared_cross_mark:", "\u274E"},
            {":no_entry:", "\u26D4"},
            {":o:", "\u2B55"},
            {":ophiuchus:", "\u26CE"},
            {":part_alternation_mark:", "\u303D"},
            {":partly_sunny:", "\u26C5"},
            {":pencil2:", "\u270F"},
            {":phone:", "\u260E"},
            {":pisces:", "\u2653"},
            {":point_up:", "\u261D"},
            {":question:", "\u2753"},
            {":raised_hand:", "\u270B"},
            {":recycle:", "\u267B"},
            {":registered:", "\u00AE"},
            {":relaxed:", "\u263A"},
            {":rewind:", "\u23EA"},
            {":sagittarius:", "\u2650"},
            {":sailboat:", "\u26F5"},
            {":scissors:", "\u2702"},
            {":scorpius:", "\u264F"},
            {":secret:", "\u3299"},
            {":snowflake:", "\u2744"},
            {":snowman:", "\u26C4"},
            {":soccer:", "\u26BD"},
            {":spades:", "\u2660"},
            {":sparkle:", "\u2747"},
            {":sparkles:", "\u2728"},
            {":star:", "\u2B50"},
            {":sunny:", "\u2600"},
            {":taurus:", "\u2649"},
            {":telephone:", "\u260E"},
            {":tent:", "\u26FA"},
            {":tm:", "\u2122"},
            {":umbrella:", "\u2614"},
            {":v:", "\u270C"},
            {":virgo:", "\u264D"},
            {":warning:", "\u26A0"},
            {":watch:", "\u231A"},
            {":wavy_dash:", "\u3030"},
            {":wheelchair:", "\u267F"},
            {":white_check_mark:", "\u2705"},
            {":white_circle:", "\u26AA"},
            {":white_large_square:", "\u2B1C"},
            {":white_medium_small_square:", "\u25FD"},
            {":white_medium_square:", "\u25FB"},
            {":white_small_square:", "\u25AB"},
            {":x:", "\u274C"},
            {":zap:", "\u26A1"},

            {":+1:", new String(Character.toChars(0x1F44D))},
            {":-1:", new String(Character.toChars(0x1F44E))},
            {":100:", new String(Character.toChars(0x1F4AF))},
            {":1234:", new String(Character.toChars(0x1F522))},
            {":8ball:", new String(Character.toChars(0x1F3B1))},
            {":a:", new String(Character.toChars(0x1F170))},
            {":ab:", new String(Character.toChars(0x1F18E))},
            {":abc:", new String(Character.toChars(0x1F524))},
            {":abcd:", new String(Character.toChars(0x1F521))},
            {":accept:", new String(Character.toChars(0x1F251))},
            {":aerial_tramway:", new String(Character.toChars(0x1F6A1))},
            {":alien:", new String(Character.toChars(0x1F47D))},
            {":ambulance:", new String(Character.toChars(0x1F691))},
            {":angel:", new String(Character.toChars(0x1F47C))},
            {":anger:", new String(Character.toChars(0x1F4A2))},
            {":angry:", new String(Character.toChars(0x1F620))},
            {":anguished:", new String(Character.toChars(0x1F627))},
            {":ant:", new String(Character.toChars(0x1F41C))},
            {":apple:", new String(Character.toChars(0x1F34E))},
            {":arrow_down_small:", new String(Character.toChars(0x1F53D))},
            {":arrow_up_small:", new String(Character.toChars(0x1F53C))},
            {":arrows_clockwise:", new String(Character.toChars(0x1F503))},
            {":arrows_counterclockwise:", new String(Character.toChars(0x1F504))},
            {":art:", new String(Character.toChars(0x1F3A8))},
            {":articulated_lorry:", new String(Character.toChars(0x1F69B))},
            {":astonished:", new String(Character.toChars(0x1F632))},
            {":athletic_shoe:", new String(Character.toChars(0x1F45F))},
            {":atm:", new String(Character.toChars(0x1F3E7))},
            {":b:", new String(Character.toChars(0x1F171))},
            {":baby:", new String(Character.toChars(0x1F476))},
            {":baby_bottle:", new String(Character.toChars(0x1F37C))},
            {":baby_chick:", new String(Character.toChars(0x1F424))},
            {":baby_symbol:", new String(Character.toChars(0x1F6BC))},
            {":back:", new String(Character.toChars(0x1F519))},
            {":baggage_claim:", new String(Character.toChars(0x1F6C4))},
            {":balloon:", new String(Character.toChars(0x1F388))},
            {":bamboo:", new String(Character.toChars(0x1F38D))},
            {":banana:", new String(Character.toChars(0x1F34C))},
            {":bank:", new String(Character.toChars(0x1F3E6))},
            {":bar_chart:", new String(Character.toChars(0x1F4CA))},
            {":barber:", new String(Character.toChars(0x1F488))},
            {":basketball:", new String(Character.toChars(0x1F3C0))},
            {":bath:", new String(Character.toChars(0x1F6C0))},
            {":bathtub:", new String(Character.toChars(0x1F6C1))},
            {":battery:", new String(Character.toChars(0x1F50B))},
            {":bear:", new String(Character.toChars(0x1F43B))},
            {":bee:", new String(Character.toChars(0x1F41D))},
            {":beer:", new String(Character.toChars(0x1F37A))},
            {":beers:", new String(Character.toChars(0x1F37B))},
            {":beetle:", new String(Character.toChars(0x1F41E))},
            {":beginner:", new String(Character.toChars(0x1F530))},
            {":bell:", new String(Character.toChars(0x1F514))},
            {":bento:", new String(Character.toChars(0x1F371))},
            {":bicyclist:", new String(Character.toChars(0x1F6B4))},
            {":bike:", new String(Character.toChars(0x1F6B2))},
            {":bikini:", new String(Character.toChars(0x1F459))},
            {":bird:", new String(Character.toChars(0x1F426))},
            {":birthday:", new String(Character.toChars(0x1F382))},
            {":black_joker:", new String(Character.toChars(0x1F0CF))},
            {":black_square_button:", new String(Character.toChars(0x1F532))},
            {":blossom:", new String(Character.toChars(0x1F33C))},
            {":blowfish:", new String(Character.toChars(0x1F421))},
            {":blue_book:", new String(Character.toChars(0x1F4D8))},
            {":blue_car:", new String(Character.toChars(0x1F699))},
            {":blue_heart:", new String(Character.toChars(0x1F499))},
            {":blush:", new String(Character.toChars(0x1F60A))},
            {":boar:", new String(Character.toChars(0x1F417))},
            {":bomb:", new String(Character.toChars(0x1F4A3))},
            {":book:", new String(Character.toChars(0x1F4D6))},
            {":bookmark:", new String(Character.toChars(0x1F516))},
            {":bookmark_tabs:", new String(Character.toChars(0x1F4D1))},
            {":books:", new String(Character.toChars(0x1F4DA))},
            {":boom:", new String(Character.toChars(0x1F4A5))},
            {":boot:", new String(Character.toChars(0x1F462))},
            {":bouquet:", new String(Character.toChars(0x1F490))},
            {":bow:", new String(Character.toChars(0x1F647))},
            {":bowling:", new String(Character.toChars(0x1F3B3))},
            {":boy:", new String(Character.toChars(0x1F466))},
            {":bread:", new String(Character.toChars(0x1F35E))},
            {":bride_with_veil:", new String(Character.toChars(0x1F470))},
            {":bridge_at_night:", new String(Character.toChars(0x1F309))},
            {":briefcase:", new String(Character.toChars(0x1F4BC))},
            {":broken_heart:", new String(Character.toChars(0x1F494))},
            {":bug:", new String(Character.toChars(0x1F41B))},
            {":bulb:", new String(Character.toChars(0x1F4A1))},
            {":bullettrain_front:", new String(Character.toChars(0x1F685))},
            {":bullettrain_side:", new String(Character.toChars(0x1F684))},
            {":bus:", new String(Character.toChars(0x1F68C))},
            {":busstop:", new String(Character.toChars(0x1F68F))},
            {":bust_in_silhouette:", new String(Character.toChars(0x1F464))},
            {":busts_in_silhouette:", new String(Character.toChars(0x1F465))},
            {":cactus:", new String(Character.toChars(0x1F335))},
            {":cake:", new String(Character.toChars(0x1F370))},
            {":calendar:", new String(Character.toChars(0x1F4C6))},
            {":calling:", new String(Character.toChars(0x1F4F2))},
            {":camel:", new String(Character.toChars(0x1F42B))},
            {":camera:", new String(Character.toChars(0x1F4F7))},
            {":candy:", new String(Character.toChars(0x1F36C))},
            {":capital_abcd:", new String(Character.toChars(0x1F520))},
            {":car:", new String(Character.toChars(0x1F697))},
            {":card_index:", new String(Character.toChars(0x1F4C7))},
            {":carousel_horse:", new String(Character.toChars(0x1F3A0))},
            {":cat:", new String(Character.toChars(0x1F431))},
            {":cat2:", new String(Character.toChars(0x1F408))},
            {":cd:", new String(Character.toChars(0x1F4BF))},
            {":chart:", new String(Character.toChars(0x1F4B9))},
            {":chart_with_downwards_trend:", new String(Character.toChars(0x1F4C9))},
            {":chart_with_upwards_trend:", new String(Character.toChars(0x1F4C8))},
            {":checkered_flag:", new String(Character.toChars(0x1F3C1))},
            {":cherries:", new String(Character.toChars(0x1F352))},
            {":cherry_blossom:", new String(Character.toChars(0x1F338))},
            {":chestnut:", new String(Character.toChars(0x1F330))},
            {":chicken:", new String(Character.toChars(0x1F414))},
            {":children_crossing:", new String(Character.toChars(0x1F6B8))},
            {":chocolate_bar:", new String(Character.toChars(0x1F36B))},
            {":christmas_tree:", new String(Character.toChars(0x1F384))},
            {":cinema:", new String(Character.toChars(0x1F3A6))},
            {":circus_tent:", new String(Character.toChars(0x1F3AA))},
            {":city_sunrise:", new String(Character.toChars(0x1F307))},
            {":city_sunset:", new String(Character.toChars(0x1F306))},
            {":cl:", new String(Character.toChars(0x1F191))},
            {":clap:", new String(Character.toChars(0x1F44F))},
            {":clapper:", new String(Character.toChars(0x1F3AC))},
            {":clipboard:", new String(Character.toChars(0x1F4CB))},
            {":clock1:", new String(Character.toChars(0x1F550))},
            {":clock10:", new String(Character.toChars(0x1F559))},
            {":clock1030:", new String(Character.toChars(0x1F565))},
            {":clock11:", new String(Character.toChars(0x1F55A))},
            {":clock1130:", new String(Character.toChars(0x1F566))},
            {":clock12:", new String(Character.toChars(0x1F55B))},
            {":clock1230:", new String(Character.toChars(0x1F567))},
            {":clock130:", new String(Character.toChars(0x1F55C))},
            {":clock2:", new String(Character.toChars(0x1F551))},
            {":clock230:", new String(Character.toChars(0x1F55D))},
            {":clock3:", new String(Character.toChars(0x1F552))},
            {":clock330:", new String(Character.toChars(0x1F55E))},
            {":clock4:", new String(Character.toChars(0x1F553))},
            {":clock430:", new String(Character.toChars(0x1F55F))},
            {":clock5:", new String(Character.toChars(0x1F554))},
            {":clock530:", new String(Character.toChars(0x1F560))},
            {":clock6:", new String(Character.toChars(0x1F555))},
            {":clock630:", new String(Character.toChars(0x1F561))},
            {":clock7:", new String(Character.toChars(0x1F556))},
            {":clock730:", new String(Character.toChars(0x1F562))},
            {":clock8:", new String(Character.toChars(0x1F557))},
            {":clock830:", new String(Character.toChars(0x1F563))},
            {":clock9:", new String(Character.toChars(0x1F558))},
            {":clock930:", new String(Character.toChars(0x1F564))},
            {":closed_book:", new String(Character.toChars(0x1F4D5))},
            {":closed_lock_with_key:", new String(Character.toChars(0x1F510))},
            {":closed_umbrella:", new String(Character.toChars(0x1F302))},
            {":cocktail:", new String(Character.toChars(0x1F378))},
            {":cold_sweat:", new String(Character.toChars(0x1F630))},
            {":collision:", new String(Character.toChars(0x1F4A5))},
            {":computer:", new String(Character.toChars(0x1F4BB))},
            {":confetti_ball:", new String(Character.toChars(0x1F38A))},
            {":confounded:", new String(Character.toChars(0x1F616))},
            {":confused:", new String(Character.toChars(0x1F615))},
            {":construction:", new String(Character.toChars(0x1F6A7))},
            {":construction_worker:", new String(Character.toChars(0x1F477))},
            {":convenience_store:", new String(Character.toChars(0x1F3EA))},
            {":cookie:", new String(Character.toChars(0x1F36A))},
            {":cool:", new String(Character.toChars(0x1F192))},
            {":cop:", new String(Character.toChars(0x1F46E))},
            {":corn:", new String(Character.toChars(0x1F33D))},
            {":couple:", new String(Character.toChars(0x1F46B))},
            {":couple_with_heart:", new String(Character.toChars(0x1F491))},
            {":couplekiss:", new String(Character.toChars(0x1F48F))},
            {":cow:", new String(Character.toChars(0x1F42E))},
            {":cow2:", new String(Character.toChars(0x1F404))},
            {":credit_card:", new String(Character.toChars(0x1F4B3))},
            {":crocodile:", new String(Character.toChars(0x1F40A))},
            {":crossed_flags:", new String(Character.toChars(0x1F38C))},
            {":crown:", new String(Character.toChars(0x1F451))},
            {":cry:", new String(Character.toChars(0x1F622))},
            {":crying_cat_face:", new String(Character.toChars(0x1F63F))},
            {":crystal_ball:", new String(Character.toChars(0x1F52E))},
            {":cupid:", new String(Character.toChars(0x1F498))},
            {":currency_exchange:", new String(Character.toChars(0x1F4B1))},
            {":curry:", new String(Character.toChars(0x1F35B))},
            {":custard:", new String(Character.toChars(0x1F36E))},
            {":customs:", new String(Character.toChars(0x1F6C3))},
            {":cyclone:", new String(Character.toChars(0x1F300))},
            {":dancer:", new String(Character.toChars(0x1F483))},
            {":dancers:", new String(Character.toChars(0x1F46F))},
            {":dango:", new String(Character.toChars(0x1F361))},
            {":dart:", new String(Character.toChars(0x1F3AF))},
            {":dash:", new String(Character.toChars(0x1F4A8))},
            {":browse_time:", new String(Character.toChars(0x1F4C5))},
            {":deciduous_tree:", new String(Character.toChars(0x1F333))},
            {":department_store:", new String(Character.toChars(0x1F3EC))},
            {":diamond_shape_with_a_dot_inside:", new String(Character.toChars(0x1F4A0))},
            {":disappointed:", new String(Character.toChars(0x1F61E))},
            {":disappointed_relieved:", new String(Character.toChars(0x1F625))},
            {":dizzy:", new String(Character.toChars(0x1F4AB))},
            {":dizzy_face:", new String(Character.toChars(0x1F635))},
            {":do_not_litter:", new String(Character.toChars(0x1F6AF))},
            {":dog:", new String(Character.toChars(0x1F436))},
            {":dog2:", new String(Character.toChars(0x1F415))},
            {":dollar:", new String(Character.toChars(0x1F4B5))},
            {":dolls:", new String(Character.toChars(0x1F38E))},
            {":dolphin:", new String(Character.toChars(0x1F42C))},
            {":door:", new String(Character.toChars(0x1F6AA))},
            {":doughnut:", new String(Character.toChars(0x1F369))},
            {":dragon:", new String(Character.toChars(0x1F409))},
            {":dragon_face:", new String(Character.toChars(0x1F432))},
            {":dress:", new String(Character.toChars(0x1F457))},
            {":dromedary_camel:", new String(Character.toChars(0x1F42A))},
            {":droplet:", new String(Character.toChars(0x1F4A7))},
            {":dvd:", new String(Character.toChars(0x1F4C0))},
            {":e-mail:", new String(Character.toChars(0x1F4E7))},
            {":ear:", new String(Character.toChars(0x1F442))},
            {":ear_of_rice:", new String(Character.toChars(0x1F33E))},
            {":earth_africa:", new String(Character.toChars(0x1F30D))},
            {":earth_americas:", new String(Character.toChars(0x1F30E))},
            {":earth_asia:", new String(Character.toChars(0x1F30F))},
            {":egg:", new String(Character.toChars(0x1F373))},
            {":eggplant:", new String(Character.toChars(0x1F346))},
            {":electric_plug:", new String(Character.toChars(0x1F50C))},
            {":elephant:", new String(Character.toChars(0x1F418))},
            {":end:", new String(Character.toChars(0x1F51A))},
            {":envelope_with_arrow:", new String(Character.toChars(0x1F4E9))},
            {":euro:", new String(Character.toChars(0x1F4B6))},
            {":european_castle:", new String(Character.toChars(0x1F3F0))},
            {":european_post_office:", new String(Character.toChars(0x1F3E4))},
            {":evergreen_tree:", new String(Character.toChars(0x1F332))},
            {":expressionless:", new String(Character.toChars(0x1F611))},
            {":eyeglasses:", new String(Character.toChars(0x1F453))},
            {":eyes:", new String(Character.toChars(0x1F440))},
            {":facepunch:", new String(Character.toChars(0x1F44A))},
            {":factory:", new String(Character.toChars(0x1F3ED))},
            {":fallen_leaf:", new String(Character.toChars(0x1F342))},
            {":family:", new String(Character.toChars(0x1F46A))},
            {":fax:", new String(Character.toChars(0x1F4E0))},
            {":fearful:", new String(Character.toChars(0x1F628))},
            {":feet:", new String(Character.toChars(0x1F43E))},
            {":ferris_wheel:", new String(Character.toChars(0x1F3A1))},
            {":file_folder:", new String(Character.toChars(0x1F4C1))},
            {":fire:", new String(Character.toChars(0x1F525))},
            {":fire_engine:", new String(Character.toChars(0x1F692))},
            {":fireworks:", new String(Character.toChars(0x1F386))},
            {":first_quarter_moon:", new String(Character.toChars(0x1F313))},
            {":first_quarter_moon_with_face:", new String(Character.toChars(0x1F31B))},
            {":fish:", new String(Character.toChars(0x1F41F))},
            {":fish_cake:", new String(Character.toChars(0x1F365))},
            {":fishing_pole_and_fish:", new String(Character.toChars(0x1F3A3))},
            {":flags:", new String(Character.toChars(0x1F38F))},
            {":flashlight:", new String(Character.toChars(0x1F526))},
            {":floppy_disk:", new String(Character.toChars(0x1F4BE))},
            {":flower_playing_cards:", new String(Character.toChars(0x1F3B4))},
            {":flushed:", new String(Character.toChars(0x1F633))},
            {":foggy:", new String(Character.toChars(0x1F301))},
            {":football:", new String(Character.toChars(0x1F3C8))},
            {":footprints:", new String(Character.toChars(0x1F463))},
            {":fork_and_knife:", new String(Character.toChars(0x1F374))},
            {":four_leaf_clover:", new String(Character.toChars(0x1F340))},
            {":free:", new String(Character.toChars(0x1F193))},
            {":fried_shrimp:", new String(Character.toChars(0x1F364))},
            {":fries:", new String(Character.toChars(0x1F35F))},
            {":frog:", new String(Character.toChars(0x1F438))},
            {":frowning:", new String(Character.toChars(0x1F626))},
            {":full_moon:", new String(Character.toChars(0x1F315))},
            {":full_moon_with_face:", new String(Character.toChars(0x1F31D))},
            {":game_die:", new String(Character.toChars(0x1F3B2))},
            {":gem:", new String(Character.toChars(0x1F48E))},
            {":ghost:", new String(Character.toChars(0x1F47B))},
            {":gift:", new String(Character.toChars(0x1F381))},
            {":gift_heart:", new String(Character.toChars(0x1F49D))},
            {":girl:", new String(Character.toChars(0x1F467))},
            {":globe_with_meridians:", new String(Character.toChars(0x1F310))},
            {":goat:", new String(Character.toChars(0x1F410))},
            {":grapes:", new String(Character.toChars(0x1F347))},
            {":green_apple:", new String(Character.toChars(0x1F34F))},
            {":green_book:", new String(Character.toChars(0x1F4D7))},
            {":green_heart:", new String(Character.toChars(0x1F49A))},
            {":grimacing:", new String(Character.toChars(0x1F62C))},
            {":grin:", new String(Character.toChars(0x1F601))},
            {":grinning:", new String(Character.toChars(0x1F600))},
            {":guardsman:", new String(Character.toChars(0x1F482))},
            {":guitar:", new String(Character.toChars(0x1F3B8))},
            {":gun:", new String(Character.toChars(0x1F52B))},
            {":haircut:", new String(Character.toChars(0x1F487))},
            {":hamburger:", new String(Character.toChars(0x1F354))},
            {":hammer:", new String(Character.toChars(0x1F528))},
            {":hamster:", new String(Character.toChars(0x1F439))},
            {":handbag:", new String(Character.toChars(0x1F45C))},
            {":hankey:", new String(Character.toChars(0x1F4A9))},
            {":hatched_chick:", new String(Character.toChars(0x1F425))},
            {":hatching_chick:", new String(Character.toChars(0x1F423))},
            {":headphones:", new String(Character.toChars(0x1F3A7))},
            {":hear_no_evil:", new String(Character.toChars(0x1F649))},
            {":heart_decoration:", new String(Character.toChars(0x1F49F))},
            {":heart_eyes:", new String(Character.toChars(0x1F60D))},
            {":heart_eyes_cat:", new String(Character.toChars(0x1F63B))},
            {":heartbeat:", new String(Character.toChars(0x1F493))},
            {":heartpulse:", new String(Character.toChars(0x1F497))},
            {":heavy_dollar_sign:", new String(Character.toChars(0x1F4B2))},
            {":helicopter:", new String(Character.toChars(0x1F681))},
            {":herb:", new String(Character.toChars(0x1F33F))},
            {":hibiscus:", new String(Character.toChars(0x1F33A))},
            {":high_brightness:", new String(Character.toChars(0x1F506))},
            {":high_heel:", new String(Character.toChars(0x1F460))},
            {":hocho:", new String(Character.toChars(0x1F52A))},
            {":honey_pot:", new String(Character.toChars(0x1F36F))},
            {":honeybee:", new String(Character.toChars(0x1F41D))},
            {":horse:", new String(Character.toChars(0x1F434))},
            {":horse_racing:", new String(Character.toChars(0x1F3C7))},
            {":hospital:", new String(Character.toChars(0x1F3E5))},
            {":hotel:", new String(Character.toChars(0x1F3E8))},
            {":house:", new String(Character.toChars(0x1F3E0))},
            {":house_with_garden:", new String(Character.toChars(0x1F3E1))},
            {":hushed:", new String(Character.toChars(0x1F62F))},
            {":ice_cream:", new String(Character.toChars(0x1F368))},
            {":icecream:", new String(Character.toChars(0x1F366))},
            {":id:", new String(Character.toChars(0x1F194))},
            {":ideograph_advantage:", new String(Character.toChars(0x1F250))},
            {":imp:", new String(Character.toChars(0x1F47F))},
            {":inbox_tray:", new String(Character.toChars(0x1F4E5))},
            {":incoming_envelope:", new String(Character.toChars(0x1F4E8))},
            {":information_desk_person:", new String(Character.toChars(0x1F481))},
            {":innocent:", new String(Character.toChars(0x1F607))},
            {":iphone:", new String(Character.toChars(0x1F4F1))},
            {":izakaya_lantern:", new String(Character.toChars(0x1F3EE))},
            {":jack_o_lantern:", new String(Character.toChars(0x1F383))},
            {":japan:", new String(Character.toChars(0x1F5FE))},
            {":japanese_castle:", new String(Character.toChars(0x1F3EF))},
            {":japanese_goblin:", new String(Character.toChars(0x1F47A))},
            {":japanese_ogre:", new String(Character.toChars(0x1F479))},
            {":jeans:", new String(Character.toChars(0x1F456))},
            {":joy:", new String(Character.toChars(0x1F602))},
            {":joy_cat:", new String(Character.toChars(0x1F639))},
            {":key:", new String(Character.toChars(0x1F511))},
            {":keycap_ten:", new String(Character.toChars(0x1F51F))},
            {":kimono:", new String(Character.toChars(0x1F458))},
            {":kiss:", new String(Character.toChars(0x1F48B))},
            {":kissing:", new String(Character.toChars(0x1F617))},
            {":kissing_cat:", new String(Character.toChars(0x1F63D))},
            {":kissing_closed_eyes:", new String(Character.toChars(0x1F61A))},
            {":kissing_heart:", new String(Character.toChars(0x1F618))},
            {":kissing_smiling_eyes:", new String(Character.toChars(0x1F619))},
            {":koala:", new String(Character.toChars(0x1F428))},
            {":koko:", new String(Character.toChars(0x1F201))},
            {":large_blue_circle:", new String(Character.toChars(0x1F535))},
            {":large_blue_diamond:", new String(Character.toChars(0x1F537))},
            {":large_orange_diamond:", new String(Character.toChars(0x1F536))},
            {":last_quarter_moon:", new String(Character.toChars(0x1F317))},
            {":last_quarter_moon_with_face:", new String(Character.toChars(0x1F31C))},
            {":laughing:", new String(Character.toChars(0x1F606))},
            {":leaves:", new String(Character.toChars(0x1F343))},
            {":ledger:", new String(Character.toChars(0x1F4D2))},
            {":left_luggage:", new String(Character.toChars(0x1F6C5))},
            {":lemon:", new String(Character.toChars(0x1F34B))},
            {":leopard:", new String(Character.toChars(0x1F406))},
            {":light_rail:", new String(Character.toChars(0x1F688))},
            {":link:", new String(Character.toChars(0x1F517))},
            {":lips:", new String(Character.toChars(0x1F444))},
            {":lipstick:", new String(Character.toChars(0x1F484))},
            {":lock:", new String(Character.toChars(0x1F512))},
            {":lock_with_ink_pen:", new String(Character.toChars(0x1F50F))},
            {":lollipop:", new String(Character.toChars(0x1F36D))},
            {":loudspeaker:", new String(Character.toChars(0x1F4E2))},
            {":love_hotel:", new String(Character.toChars(0x1F3E9))},
            {":love_letter:", new String(Character.toChars(0x1F48C))},
            {":low_brightness:", new String(Character.toChars(0x1F505))},
            {":mag:", new String(Character.toChars(0x1F50D))},
            {":mag_right:", new String(Character.toChars(0x1F50E))},
            {":mahjong:", new String(Character.toChars(0x1F004))},
            {":mailbox:", new String(Character.toChars(0x1F4EB))},
            {":mailbox_closed:", new String(Character.toChars(0x1F4EA))},
            {":mailbox_with_mail:", new String(Character.toChars(0x1F4EC))},
            {":mailbox_with_no_mail:", new String(Character.toChars(0x1F4ED))},
            {":man:", new String(Character.toChars(0x1F468))},
            {":man_with_gua_pi_mao:", new String(Character.toChars(0x1F472))},
            {":man_with_turban:", new String(Character.toChars(0x1F473))},
            {":mans_shoe:", new String(Character.toChars(0x1F45E))},
            {":maple_leaf:", new String(Character.toChars(0x1F341))},
            {":mask:", new String(Character.toChars(0x1F637))},
            {":massage:", new String(Character.toChars(0x1F486))},
            {":meat_on_bone:", new String(Character.toChars(0x1F356))},
            {":mega:", new String(Character.toChars(0x1F4E3))},
            {":melon:", new String(Character.toChars(0x1F348))},
            {":memo:", new String(Character.toChars(0x1F4DD))},
            {":mens:", new String(Character.toChars(0x1F6B9))},
            {":metro:", new String(Character.toChars(0x1F687))},
            {":microphone:", new String(Character.toChars(0x1F3A4))},
            {":microscope:", new String(Character.toChars(0x1F52C))},
            {":milky_way:", new String(Character.toChars(0x1F30C))},
            {":minibus:", new String(Character.toChars(0x1F690))},
            {":minidisc:", new String(Character.toChars(0x1F4BD))},
            {":mobile_phone_off:", new String(Character.toChars(0x1F4F4))},
            {":money_with_wings:", new String(Character.toChars(0x1F4B8))},
            {":moneybag:", new String(Character.toChars(0x1F4B0))},
            {":monkey:", new String(Character.toChars(0x1F412))},
            {":monkey_face:", new String(Character.toChars(0x1F435))},
            {":monorail:", new String(Character.toChars(0x1F69D))},
            {":moon:", new String(Character.toChars(0x1F319))},
            {":mortar_board:", new String(Character.toChars(0x1F393))},
            {":mount_fuji:", new String(Character.toChars(0x1F5FB))},
            {":mountain_bicyclist:", new String(Character.toChars(0x1F6B5))},
            {":mountain_cableway:", new String(Character.toChars(0x1F6A0))},
            {":mountain_railway:", new String(Character.toChars(0x1F69E))},
            {":mouse:", new String(Character.toChars(0x1F42D))},
            {":mouse2:", new String(Character.toChars(0x1F401))},
            {":movie_camera:", new String(Character.toChars(0x1F3A5))},
            {":moyai:", new String(Character.toChars(0x1F5FF))},
            {":muscle:", new String(Character.toChars(0x1F4AA))},
            {":mushroom:", new String(Character.toChars(0x1F344))},
            {":musical_keyboard:", new String(Character.toChars(0x1F3B9))},
            {":musical_note:", new String(Character.toChars(0x1F3B5))},
            {":musical_score:", new String(Character.toChars(0x1F3BC))},
            {":mute:", new String(Character.toChars(0x1F507))},
            {":nail_care:", new String(Character.toChars(0x1F485))},
            {":name_badge:", new String(Character.toChars(0x1F4DB))},
            {":necktie:", new String(Character.toChars(0x1F454))},
            {":neutral_face:", new String(Character.toChars(0x1F610))},
            {":new:", new String(Character.toChars(0x1F195))},
            {":new_moon:", new String(Character.toChars(0x1F311))},
            {":new_moon_with_face:", new String(Character.toChars(0x1F31A))},
            {":newspaper:", new String(Character.toChars(0x1F4F0))},
            {":ng:", new String(Character.toChars(0x1F196))},
            {":no_bell:", new String(Character.toChars(0x1F515))},
            {":no_bicycles:", new String(Character.toChars(0x1F6B3))},
            {":no_entry_sign:", new String(Character.toChars(0x1F6AB))},
            {":no_good:", new String(Character.toChars(0x1F645))},
            {":no_mobile_phones:", new String(Character.toChars(0x1F4F5))},
            {":no_mouth:", new String(Character.toChars(0x1F636))},
            {":no_pedestrians:", new String(Character.toChars(0x1F6B7))},
            {":no_smoking:", new String(Character.toChars(0x1F6AD))},
            {":non-potable_water:", new String(Character.toChars(0x1F6B1))},
            {":nose:", new String(Character.toChars(0x1F443))},
            {":notebook:", new String(Character.toChars(0x1F4D3))},
            {":notebook_with_decorative_cover:", new String(Character.toChars(0x1F4D4))},
            {":notes:", new String(Character.toChars(0x1F3B6))},
            {":nut_and_bolt:", new String(Character.toChars(0x1F529))},
            {":o2:", new String(Character.toChars(0x1F17E))},
            {":ocean:", new String(Character.toChars(0x1F30A))},
            {":octopus:", new String(Character.toChars(0x1F419))},
            {":oden:", new String(Character.toChars(0x1F362))},
            {":office:", new String(Character.toChars(0x1F3E2))},
            {":ok:", new String(Character.toChars(0x1F197))},
            {":ok_hand:", new String(Character.toChars(0x1F44C))},
            {":ok_woman:", new String(Character.toChars(0x1F646))},
            {":older_man:", new String(Character.toChars(0x1F474))},
            {":older_woman:", new String(Character.toChars(0x1F475))},
            {":on:", new String(Character.toChars(0x1F51B))},
            {":oncoming_automobile:", new String(Character.toChars(0x1F698))},
            {":oncoming_bus:", new String(Character.toChars(0x1F68D))},
            {":oncoming_police_car:", new String(Character.toChars(0x1F694))},
            {":oncoming_taxi:", new String(Character.toChars(0x1F696))},
            {":open_book:", new String(Character.toChars(0x1F4D6))},
            {":open_file_folder:", new String(Character.toChars(0x1F4C2))},
            {":open_hands:", new String(Character.toChars(0x1F450))},
            {":open_mouth:", new String(Character.toChars(0x1F62E))},
            {":orange_book:", new String(Character.toChars(0x1F4D9))},
            {":outbox_tray:", new String(Character.toChars(0x1F4E4))},
            {":ox:", new String(Character.toChars(0x1F402))},
            {":package:", new String(Character.toChars(0x1F4E6))},
            {":page_facing_up:", new String(Character.toChars(0x1F4C4))},
            {":page_with_curl:", new String(Character.toChars(0x1F4C3))},
            {":pager:", new String(Character.toChars(0x1F4DF))},
            {":palm_tree:", new String(Character.toChars(0x1F334))},
            {":panda_face:", new String(Character.toChars(0x1F43C))},
            {":paperclip:", new String(Character.toChars(0x1F4CE))},
            {":parking:", new String(Character.toChars(0x1F17F))},
            {":passport_control:", new String(Character.toChars(0x1F6C2))},
            {":paw_prints:", new String(Character.toChars(0x1F43E))},
            {":peach:", new String(Character.toChars(0x1F351))},
            {":pear:", new String(Character.toChars(0x1F350))},
            {":pencil:", new String(Character.toChars(0x1F4DD))},
            {":penguin:", new String(Character.toChars(0x1F427))},
            {":pensive:", new String(Character.toChars(0x1F614))},
            {":performing_arts:", new String(Character.toChars(0x1F3AD))},
            {":persevere:", new String(Character.toChars(0x1F623))},
            {":person_frowning:", new String(Character.toChars(0x1F64D))},
            {":person_with_blond_hair:", new String(Character.toChars(0x1F471))},
            {":person_with_pouting_face:", new String(Character.toChars(0x1F64E))},
            {":pig:", new String(Character.toChars(0x1F437))},
            {":pig2:", new String(Character.toChars(0x1F416))},
            {":pig_nose:", new String(Character.toChars(0x1F43D))},
            {":pill:", new String(Character.toChars(0x1F48A))},
            {":pineapple:", new String(Character.toChars(0x1F34D))},
            {":pizza:", new String(Character.toChars(0x1F355))},
            {":point_down:", new String(Character.toChars(0x1F447))},
            {":point_left:", new String(Character.toChars(0x1F448))},
            {":point_right:", new String(Character.toChars(0x1F449))},
            {":point_up_2:", new String(Character.toChars(0x1F446))},
            {":police_car:", new String(Character.toChars(0x1F693))},
            {":poodle:", new String(Character.toChars(0x1F429))},
            {":poop:", new String(Character.toChars(0x1F4A9))},
            {":post_office:", new String(Character.toChars(0x1F3E3))},
            {":postal_horn:", new String(Character.toChars(0x1F4EF))},
            {":postbox:", new String(Character.toChars(0x1F4EE))},
            {":potable_water:", new String(Character.toChars(0x1F6B0))},
            {":pouch:", new String(Character.toChars(0x1F45D))},
            {":poultry_leg:", new String(Character.toChars(0x1F357))},
            {":pound:", new String(Character.toChars(0x1F4B7))},
            {":pouting_cat:", new String(Character.toChars(0x1F63E))},
            {":pray:", new String(Character.toChars(0x1F64F))},
            {":princess:", new String(Character.toChars(0x1F478))},
            {":punch:", new String(Character.toChars(0x1F44A))},
            {":purple_heart:", new String(Character.toChars(0x1F49C))},
            {":purse:", new String(Character.toChars(0x1F45B))},
            {":pushpin:", new String(Character.toChars(0x1F4CC))},
            {":put_litter_in_its_place:", new String(Character.toChars(0x1F6AE))},
            {":rabbit:", new String(Character.toChars(0x1F430))},
            {":rabbit2:", new String(Character.toChars(0x1F407))},
            {":racehorse:", new String(Character.toChars(0x1F40E))},
            {":radio:", new String(Character.toChars(0x1F4FB))},
            {":radio_button:", new String(Character.toChars(0x1F518))},
            {":rage:", new String(Character.toChars(0x1F621))},
            {":railway_car:", new String(Character.toChars(0x1F683))},
            {":rainbow:", new String(Character.toChars(0x1F308))},
            {":raised_hands:", new String(Character.toChars(0x1F64C))},
            {":raising_hand:", new String(Character.toChars(0x1F64B))},
            {":ram:", new String(Character.toChars(0x1F40F))},
            {":ramen:", new String(Character.toChars(0x1F35C))},
            {":rat:", new String(Character.toChars(0x1F400))},
            {":red_car:", new String(Character.toChars(0x1F697))},
            {":red_circle:", new String(Character.toChars(0x1F534))},
            {":relieved:", new String(Character.toChars(0x1F60C))},
            {":repeat:", new String(Character.toChars(0x1F501))},
            {":repeat_one:", new String(Character.toChars(0x1F502))},
            {":restroom:", new String(Character.toChars(0x1F6BB))},
            {":revolving_hearts:", new String(Character.toChars(0x1F49E))},
            {":ribbon:", new String(Character.toChars(0x1F380))},
            {":rice:", new String(Character.toChars(0x1F35A))},
            {":rice_ball:", new String(Character.toChars(0x1F359))},
            {":rice_cracker:", new String(Character.toChars(0x1F358))},
            {":rice_scene:", new String(Character.toChars(0x1F391))},
            {":ring:", new String(Character.toChars(0x1F48D))},
            {":rocket:", new String(Character.toChars(0x1F680))},
            {":roller_coaster:", new String(Character.toChars(0x1F3A2))},
            {":rooster:", new String(Character.toChars(0x1F413))},
            {":rose:", new String(Character.toChars(0x1F339))},
            {":rotating_light:", new String(Character.toChars(0x1F6A8))},
            {":round_pushpin:", new String(Character.toChars(0x1F4CD))},
            {":rowboat:", new String(Character.toChars(0x1F6A3))},
            {":rugby_football:", new String(Character.toChars(0x1F3C9))},
            {":runner:", new String(Character.toChars(0x1F3C3))},
            {":running:", new String(Character.toChars(0x1F3C3))},
            {":running_shirt_with_sash:", new String(Character.toChars(0x1F3BD))},
            {":sa:", new String(Character.toChars(0x1F202))},
            {":sake:", new String(Character.toChars(0x1F376))},
            {":sandal:", new String(Character.toChars(0x1F461))},
            {":santa:", new String(Character.toChars(0x1F385))},
            {":satellite:", new String(Character.toChars(0x1F4E1))},
            {":satisfied:", new String(Character.toChars(0x1F606))},
            {":saxophone:", new String(Character.toChars(0x1F3B7))},
            {":school:", new String(Character.toChars(0x1F3EB))},
            {":school_satchel:", new String(Character.toChars(0x1F392))},
            {":scream:", new String(Character.toChars(0x1F631))},
            {":scream_cat:", new String(Character.toChars(0x1F640))},
            {":scroll:", new String(Character.toChars(0x1F4DC))},
            {":seat:", new String(Character.toChars(0x1F4BA))},
            {":see_no_evil:", new String(Character.toChars(0x1F648))},
            {":seedling:", new String(Character.toChars(0x1F331))},
            {":shaved_ice:", new String(Character.toChars(0x1F367))},
            {":sheep:", new String(Character.toChars(0x1F411))},
            {":shell:", new String(Character.toChars(0x1F41A))},
            {":ship:", new String(Character.toChars(0x1F6A2))},
            {":shirt:", new String(Character.toChars(0x1F455))},
            {":shit:", new String(Character.toChars(0x1F4A9))},
            {":shoe:", new String(Character.toChars(0x1F45E))},
            {":shower:", new String(Character.toChars(0x1F6BF))},
            {":signal_strength:", new String(Character.toChars(0x1F4F6))},
            {":six_pointed_star:", new String(Character.toChars(0x1F52F))},
            {":ski:", new String(Character.toChars(0x1F3BF))},
            {":skull:", new String(Character.toChars(0x1F480))},
            {":sleeping:", new String(Character.toChars(0x1F634))},
            {":sleepy:", new String(Character.toChars(0x1F62A))},
            {":slot_machine:", new String(Character.toChars(0x1F3B0))},
            {":small_blue_diamond:", new String(Character.toChars(0x1F539))},
            {":small_orange_diamond:", new String(Character.toChars(0x1F538))},
            {":small_red_triangle:", new String(Character.toChars(0x1F53A))},
            {":small_red_triangle_down:", new String(Character.toChars(0x1F53B))},
            {":smile:", new String(Character.toChars(0x1F604))},
            {":smile_cat:", new String(Character.toChars(0x1F638))},
            {":smiley:", new String(Character.toChars(0x1F603))},
            {":smiley_cat:", new String(Character.toChars(0x1F63A))},
            {":smiling_imp:", new String(Character.toChars(0x1F608))},
            {":smirk:", new String(Character.toChars(0x1F60F))},
            {":smirk_cat:", new String(Character.toChars(0x1F63C))},
            {":smoking:", new String(Character.toChars(0x1F6AC))},
            {":snail:", new String(Character.toChars(0x1F40C))},
            {":snake:", new String(Character.toChars(0x1F40D))},
            {":snowboarder:", new String(Character.toChars(0x1F3C2))},
            {":sob:", new String(Character.toChars(0x1F62D))},
            {":soon:", new String(Character.toChars(0x1F51C))},
            {":sos:", new String(Character.toChars(0x1F198))},
            {":sound:", new String(Character.toChars(0x1F509))},
            {":space_invader:", new String(Character.toChars(0x1F47E))},
            {":spaghetti:", new String(Character.toChars(0x1F35D))},
            {":sparkler:", new String(Character.toChars(0x1F387))},
            {":sparkling_heart:", new String(Character.toChars(0x1F496))},
            {":speak_no_evil:", new String(Character.toChars(0x1F64A))},
            {":speaker:", new String(Character.toChars(0x1F50A))},
            {":speech_balloon:", new String(Character.toChars(0x1F4AC))},
            {":speedboat:", new String(Character.toChars(0x1F6A4))},
            {":star2:", new String(Character.toChars(0x1F31F))},
            {":stars:", new String(Character.toChars(0x1F303))},
            {":station:", new String(Character.toChars(0x1F689))},
            {":statue_of_liberty:", new String(Character.toChars(0x1F5FD))},
            {":steam_locomotive:", new String(Character.toChars(0x1F682))},
            {":stew:", new String(Character.toChars(0x1F372))},
            {":straight_ruler:", new String(Character.toChars(0x1F4CF))},
            {":strawberry:", new String(Character.toChars(0x1F353))},
            {":stuck_out_tongue:", new String(Character.toChars(0x1F61B))},
            {":stuck_out_tongue_closed_eyes:", new String(Character.toChars(0x1F61D))},
            {":stuck_out_tongue_winking_eye:", new String(Character.toChars(0x1F61C))},
            {":sun_with_face:", new String(Character.toChars(0x1F31E))},
            {":sunflower:", new String(Character.toChars(0x1F33B))},
            {":sunglasses:", new String(Character.toChars(0x1F60E))},
            {":sunrise:", new String(Character.toChars(0x1F305))},
            {":sunrise_over_mountains:", new String(Character.toChars(0x1F304))},
            {":surfer:", new String(Character.toChars(0x1F3C4))},
            {":sushi:", new String(Character.toChars(0x1F363))},
            {":suspension_railway:", new String(Character.toChars(0x1F69F))},
            {":sweat:", new String(Character.toChars(0x1F613))},
            {":sweat_drops:", new String(Character.toChars(0x1F4A6))},
            {":sweat_smile:", new String(Character.toChars(0x1F605))},
            {":sweet_potato:", new String(Character.toChars(0x1F360))},
            {":swimmer:", new String(Character.toChars(0x1F3CA))},
            {":symbols:", new String(Character.toChars(0x1F523))},
            {":syringe:", new String(Character.toChars(0x1F489))},
            {":tada:", new String(Character.toChars(0x1F389))},
            {":tanabata_tree:", new String(Character.toChars(0x1F38B))},
            {":tangerine:", new String(Character.toChars(0x1F34A))},
            {":taxi:", new String(Character.toChars(0x1F695))},
            {":tea:", new String(Character.toChars(0x1F375))},
            {":telephone_receiver:", new String(Character.toChars(0x1F4DE))},
            {":telescope:", new String(Character.toChars(0x1F52D))},
            {":tennis:", new String(Character.toChars(0x1F3BE))},
            {":thought_balloon:", new String(Character.toChars(0x1F4AD))},
            {":thumbsdown:", new String(Character.toChars(0x1F44E))},
            {":thumbsup:", new String(Character.toChars(0x1F44D))},
            {":ticket:", new String(Character.toChars(0x1F3AB))},
            {":tiger:", new String(Character.toChars(0x1F42F))},
            {":tiger2:", new String(Character.toChars(0x1F405))},
            {":tired_face:", new String(Character.toChars(0x1F62B))},
            {":toilet:", new String(Character.toChars(0x1F6BD))},
            {":tokyo_tower:", new String(Character.toChars(0x1F5FC))},
            {":tomato:", new String(Character.toChars(0x1F345))},
            {":tongue:", new String(Character.toChars(0x1F445))},
            {":top:", new String(Character.toChars(0x1F51D))},
            {":tophat:", new String(Character.toChars(0x1F3A9))},
            {":tractor:", new String(Character.toChars(0x1F69C))},
            {":traffic_light:", new String(Character.toChars(0x1F6A5))},
            {":train:", new String(Character.toChars(0x1F683))},
            {":train2:", new String(Character.toChars(0x1F686))},
            {":tram:", new String(Character.toChars(0x1F68A))},
            {":triangular_flag_on_post:", new String(Character.toChars(0x1F6A9))},
            {":triangular_ruler:", new String(Character.toChars(0x1F4D0))},
            {":trident:", new String(Character.toChars(0x1F531))},
            {":triumph:", new String(Character.toChars(0x1F624))},
            {":trolleybus:", new String(Character.toChars(0x1F68E))},
            {":trophy:", new String(Character.toChars(0x1F3C6))},
            {":tropical_drink:", new String(Character.toChars(0x1F379))},
            {":tropical_fish:", new String(Character.toChars(0x1F420))},
            {":truck:", new String(Character.toChars(0x1F69A))},
            {":trumpet:", new String(Character.toChars(0x1F3BA))},
            {":tshirt:", new String(Character.toChars(0x1F455))},
            {":tulip:", new String(Character.toChars(0x1F337))},
            {":turtle:", new String(Character.toChars(0x1F422))},
            {":tv:", new String(Character.toChars(0x1F4FA))},
            {":twisted_rightwards_arrows:", new String(Character.toChars(0x1F500))},
            {":two_hearts:", new String(Character.toChars(0x1F495))},
            {":two_men_holding_hands:", new String(Character.toChars(0x1F46C))},
            {":two_women_holding_hands:", new String(Character.toChars(0x1F46D))},
            {":u5272:", new String(Character.toChars(0x1F239))},
            {":u5408:", new String(Character.toChars(0x1F234))},
            {":u55b6:", new String(Character.toChars(0x1F23A))},
            {":u6307:", new String(Character.toChars(0x1F22F))},
            {":u6708:", new String(Character.toChars(0x1F237))},
            {":u6709:", new String(Character.toChars(0x1F236))},
            {":u6e80:", new String(Character.toChars(0x1F235))},
            {":u7121:", new String(Character.toChars(0x1F21A))},
            {":u7533:", new String(Character.toChars(0x1F238))},
            {":u7981:", new String(Character.toChars(0x1F232))},
            {":u7a7a:", new String(Character.toChars(0x1F233))},
            {":unamused:", new String(Character.toChars(0x1F612))},
            {":underage:", new String(Character.toChars(0x1F51E))},
            {":unlock:", new String(Character.toChars(0x1F513))},
            {":up:", new String(Character.toChars(0x1F199))},
            {":vertical_traffic_light:", new String(Character.toChars(0x1F6A6))},
            {":vhs:", new String(Character.toChars(0x1F4FC))},
            {":vibration_mode:", new String(Character.toChars(0x1F4F3))},
            {":video_camera:", new String(Character.toChars(0x1F4F9))},
            {":video_game:", new String(Character.toChars(0x1F3AE))},
            {":violin:", new String(Character.toChars(0x1F3BB))},
            {":volcano:", new String(Character.toChars(0x1F30B))},
            {":vs:", new String(Character.toChars(0x1F19A))},
            {":walking:", new String(Character.toChars(0x1F6B6))},
            {":waning_crescent_moon:", new String(Character.toChars(0x1F318))},
            {":waning_gibbous_moon:", new String(Character.toChars(0x1F316))},
            {":water_buffalo:", new String(Character.toChars(0x1F403))},
            {":watermelon:", new String(Character.toChars(0x1F349))},
            {":wave:", new String(Character.toChars(0x1F44B))},
            {":waxing_crescent_moon:", new String(Character.toChars(0x1F312))},
            {":waxing_gibbous_moon:", new String(Character.toChars(0x1F314))},
            {":wc:", new String(Character.toChars(0x1F6BE))},
            {":weary:", new String(Character.toChars(0x1F629))},
            {":wedding:", new String(Character.toChars(0x1F492))},
            {":whale:", new String(Character.toChars(0x1F433))},
            {":whale2:", new String(Character.toChars(0x1F40B))},
            {":white_flower:", new String(Character.toChars(0x1F4AE))},
            {":white_square_button:", new String(Character.toChars(0x1F533))},
            {":wind_chime:", new String(Character.toChars(0x1F390))},
            {":wine_glass:", new String(Character.toChars(0x1F377))},
            {":wink:", new String(Character.toChars(0x1F609))},
            {":wolf:", new String(Character.toChars(0x1F43A))},
            {":woman:", new String(Character.toChars(0x1F469))},
            {":womans_clothes:", new String(Character.toChars(0x1F45A))},
            {":womans_hat:", new String(Character.toChars(0x1F452))},
            {":womens:", new String(Character.toChars(0x1F6BA))},
            {":worried:", new String(Character.toChars(0x1F61F))},
            {":wrench:", new String(Character.toChars(0x1F527))},
            {":yellow_heart:", new String(Character.toChars(0x1F49B))},
            {":yen:", new String(Character.toChars(0x1F4B4))},
            {":yum:", new String(Character.toChars(0x1F60B))},
            {":zzz:", new String(Character.toChars(0x1F4A4))},

            //搜狗表情先自行写入
            {":sougou1:", "\ud83d\ude00"},
            {":sougou2:", "\ud83d\ude06"},
            {":sougou3:", "\ud83d\ude05"},
            {":sougou4:", "\ud83e\udd23\ufe0f"},
            {":sougou5:", "\ud83d\ude07"},
            {":sougou6:", "\ud83d\ude42"},
            {":sougou7:", "\ud83d\ude43"},
            {":sougou8:", "\ud83d\ude17"},
            {":sougou9:", "\ud83d\ude19"},
            {":sougou10:", "\ud83d\ude0b"},
            {":sougou11:", "\ud83d\ude1b"},
            {":sougou12:", "\ud83e\udd11"},
            {":sougou13:", "\ud83e\udd17"},
            {":sougou14:", "\ud83e\udd13"},
            {":sougou15:", "\ud83d\ude0e"},
            {":sougou16:", "\ud83e\udd21"},
            {":sougou17:", "\ud83e\udd20"},
            {":sougou18:", "\ud83d\ude1f"},
            {":sougou19:", "\ud83d\ude15"},
            {":sougou20:", "\ud83d\ude41"},
            {":sougou21:", "\u2639\ufe0f"},
            {":sougou22:", "\ud83d\ude2b"},
            {":sougou23:", "\ud83d\ude29"},
            {":sougou24:", "\ud83d\ude24"},
            {":sougou25:", "\ud83d\ude36"},
            {":sougou26:", "\ud83d\ude10"},
            {":sougou27:", "\ud83d\ude11"},
            {":sougou28:", "\ud83d\ude2f"},
            {":sougou29:", "\ud83d\ude26"},
            {":sougou30:", "\ud83d\ude27"},
            {":sougou31:", "\ud83d\ude2e"},
            {":sougou32:", "\ud83d\ude35"},
            {":sougou33:", "\ud83e\udd24"},
            {":sougou34:", "\ud83d\ude34"},
            {":sougou35:", "\ud83d\ude44"},
            {":sougou36:", "\ud83e\udd14"},
            {":sougou37:", "\ud83e\udd25"},
            {":sougou38:", "\ud83d\ude2c"},
            {":sougou39:", "\ud83e\udd10"},
            {":sougou40:", "\ud83e\udd22"},
            {":sougou41:", "\ud83e\udd27"},
            {":sougou42:", "\ud83e\udd12"},
            {":sougou43:", "\ud83e\udd15"},
            {":sougou44:", "\ud83d\ude08"},
            {":sougou45:", "\ud83d\udc79"},
            {":sougou46:", "\ud83d\udc7a"},
            {":sougou47:", "\u2620\ufe0f"},
            {":sougou48:", "\ud83e\udd16"},
            {":sougou49:", "\ud83d\ude3a"},
            {":sougou50:", "\ud83d\ude38"},
            {":sougou51:", "\ud83d\ude39"},
            {":sougou52:", "\ud83d\ude3b"},
            {":sougou53:", "\ud83d\ude3c"},
            {":sougou54:", "\ud83d\ude3d"},
            {":sougou55:", "\ud83d\ude40"},
            {":sougou56:", "\ud83d\ude3f"},
            {":sougou57:", "\ud83d\ude3e"},
            {":sougou58:", "\ud83d\udc45"},
            {":sougou59:", "\ud83d\udc41"},
            {":sougou60:", "\ud83d\udde3"},
            {":sougou61:", "\ud83d\udc64"},
            {":sougou62:", "\ud83d\udc65\ud83c\udffc"},


    };

    static {
        for (String[] s : UNICODE_MAPPING) {
            CHEAT_SHEET_TO_UNICODE.put(s[0], s[1]);
            UNICODE_TO_CHEAT_SHEET.put(s[1], s[0]);
        }
    }
}
